<?php
class sesion {
private $clavex = '';
private $k = '';
	// Crea un ID de sesion relacionado a una llave y a la IP del usuario
	public function __construct()
	{
		session_start();				
	}

	// _SET: es para agregarle un valor a una sesion, de no estar registrada la registra
	public function __set($variable,$valor)
	{
		if(session_is_registered(md5($variable.$this->clavex))==false)
		$this->registrar(md5($variable.$this->clavex));
		$_SESSION[md5($variable.$this->clavex)]=$this->encriptar($valor);
	}
	// _GET: Obtiene el valor de una sesion, de no estar registrada regresa false
	public function __get($variable)
	{
		if(session_is_registered(md5($variable.$this->clavex)))
			return $this->desencriptar($_SESSION[md5($variable.$this->clavex)]);
		else
			return false;
	}
	// Registra la variable como sesion
	private function registrar($variable)
	{
		if(!session_is_registered(md5($variable.$this->clavex)))
			session_register(md5($variable.$this->clavex));
	}
	// Borra y destruye una sesion
	public function borrar($variable)
	{
		$_SESSION[md5($variable.$this->clavex)]='';
		session_unregister(md5($variable.$this->clavex));
	}
	// Destruye por completo todas las sesiones
	public function limpiar()
	{
		session_unset();
	}
	// Funcion para saber cuantos
	public function usuarioEnlinea() {
		$count=0;
		$handle=opendir(session_save_path());
		if($handle==false) return-1;
			while (($file = readdir($handle))!=false)
				if (ereg("^sess",$file))
				if(time()-fileatime(session_save_path().'/'.$file)<120) // 120 secs = 2 minutes session
				$count++;
				closedir($handle);
		return $count;
	}
 
	//Funciones para encriptamiento propietario de las sesiones
	private function ed($t)
	{
		$r = md5($this->k);
		$c=0;
		$v = "";
		for ($i=0;$i<strlen($t);$i++) 
		{
			if ($c==strlen($r)) $c=0;
				$v.= substr($t,$i,1) ^ substr($r,$c,1);
				$c++;
		}
	return $v;
	}
 
public function encriptar($t)
{
	if(!is_array($t)){
		$t=urlencode($t);
		srand((double)microtime()*1000000);
		$r = md5(rand(0,32000));
		$c=0;
		$v = "";
		for ($i=0;$i<strlen($t);$i++)
		{
			if ($c==strlen($r)) $c=0;
				$v.= substr($r,$c,1) .(substr($t,$i,1) ^ substr($r,$c,1));
				$c++;
		}
		$v = base64_encode($this->ed($v));
		$v = str_replace('+','AbCdE',$v);
		return $v;
	}
	else
	{
		foreach($t as $x=>$y)
		$s[$x] = $this->encriptar($y);
		return $s;
	}
}
 
	public function desencriptar($t)
	{
			if(!is_array($t)){
				$t = str_replace('AbCdE','+',$t);
				$t = $this->ed(base64_decode($t));
				$v = "";
				for ($i=0;$i<strlen($t);$i++)
				{
					$md5 = substr($t,$i,1);
					$i++;
					$v.= (substr($t,$i,1) ^ $md5);
				}
				return urldecode($v);
			}
			else
			{
				foreach($t as $x=>$y)
					$s[$x] = $this->desencriptar($y);
				return $s;
	}
}
}
?>